﻿
r = new Array(2)
function setStartState() {
    state = "start"
    r[0] = "0"
    r[1] = "0"
    operator = ""
    ix = 0
}
function addDigit(n) {
    alert("in add"); //remove
    if (state == "gettingInteger" || state == "gettingFloat")
        r[ix] = appendDigit(r[ix], n)
    else {
        r[ix] = "" + n
        state = "gettingInteger"
    }
    display(r[ix])
}
function appendDigit(n1, n2) {
    if (n1 == "0") return "" + n2
    var s = ""
    s += n1
    s += n2
    return s
}
function display(s) {
    document.calculator.total.value = s
}
function addDecimalPoint() {
    if (state != "gettingFloat") {
        decimal = true
        r[ix] += "."
        if (state == "haveOperand" || state == "getOperand2") r[ix] = "0."
        state = "gettingFloat"
        display(r[ix])
    }
}
function clearDisplay() {
    setStartState()
    display(r[0])
}
function changeSign() {
    if (r[ix].charAt(0) == "-") r[ix] = r[ix].substring(1, r[ix].length)
    else if (parseFloat(r[ix]) != 0) r[ix] = "-" + r[ix]
    display(r[ix])
}
function setTo(n) {
    r[ix] = "" + n
    state = "haveOperand"
    decimal = false
    display(r[ix])
}
function calc() {
  //remove  alert("in calc"); 
    if (state == "gettingInteger" || state == "gettingFloat" ||
  state == "haveOperand") {
        if (ix == 1) {
            r[0] = calculateOperation(operator, r[0], r[1])
            ix = 0
        }
    } else if (state == "getOperand2") {
        r[0] = calculateOperation(operator, r[0], r[0])
        ix = 0
    }
    state = "haveOperand"
    decimal = false
    display(r[ix])
}
function calculateOperation(op, x, y) {
    var result = ""
    if (op == "+") {
        result = "" + (parseFloat(x) + parseFloat(y))
    } else if (op == "-") {
        result = "" + (parseFloat(x) - parseFloat(y))
    } else if (op == "*") {
        result = "" + (parseFloat(x) * parseFloat(y))
    } else if (op == "/") {
        if (parseFloat(y) == 0) {
            alert("Division by 0 not allowed.")
            result = 0
        } else result = "" + (parseFloat(x) / parseFloat(y))
    }
    return result
}
function performOp(op) {
    if (state == "start") {
        ++ix
        operator = op
    } else if (state == "gettingInteger" || state == "gettingFloat" ||
  state == "haveOperand") {
        if (ix == 0) {
            ++ix
            operator = op
        } else {
            r[0] = calculateOperation(operator, r[0], r[1])
            display(r[0])
            operator = op
        }
    }
    state = "getOperand2"
    decimal = false
}
function applyFunction() {
    var selectionList = document.calculator.functions
    var selIX = selectionList.selectedIndex
    var sel = selectionList.options[selIX].value
    if (sel == "abs") r[ix] = Math.abs(r[ix])
    else if (sel == "acos") r[ix] = Math.acos(r[ix])
    else if (sel == "asin") r[ix] = Math.asin(r[ix])
    else if (sel == "atan") r[ix] = Math.atan(r[ix])
    else if (sel == "ceil") r[ix] = Math.ceil(r[ix])
    else if (sel == "cos") r[ix] = Math.cos(r[ix])
    else if (sel == "exp") r[ix] = Math.exp(r[ix])
    else if (sel == "floor") r[ix] = Math.floor(r[ix])
    else if (sel == "log") r[ix] = Math.log(r[ix])
    else if (sel == "sin") r[ix] = Math.sin(r[ix])
    else if (sel == "sqrt") r[ix] = Math.sqrt(r[ix])
    else r[ix] = Math.tan(r[ix])
    decimal = false
    display(r[ix])
}